package tools

import (
	"time"

	"github.com/kataras/iris/v12/middleware/jwt"
	"golang.org/x/crypto/bcrypt"
)

// 解密密码
// encoded: 加密后的密码
// original: 密码原文
func CheckPassword(encoded, original string) bool {
	if err := bcrypt.CompareHashAndPassword([]byte(encoded), []byte(original)); err != nil {
		return false
	}
	return true
}

// 生成密码
func GeneratePassword(pwd string) (string, error) {
	hash, err := bcrypt.GenerateFromPassword([]byte(pwd), bcrypt.MinCost)
	if err != nil {
		return "", nil
	}
	// 保存在数据库的密码，虽然每次生成都不同，只需保存一份即可
	return string(hash), nil
}

// 生成 token
func GenerateToken[T any](t T) (string, error) {
	signer := jwt.NewSigner(jwt.HS256,
		[]byte(GConfig.App.JWT.JWTSecret),
		time.Hour*time.Duration(GConfig.App.JWT.JWTTimeout))
	token, err := signer.Sign(t)
	return string(token), err
}
